package in.data; import android.os.Parcel; import android.os.Parcelable; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.List; import in.data.entity.BoldStyledEntity; import in.data.entity.HashEntity; import in.data.entity.ItalicStyledEntity; import in.data.entity.LinkEntity; import in.data.entity.MentionEntity; import in.data.entity.StyledEntity; import in.data.entity.UnderlineStyledEntity; import in.lib.Constants; import in.lib.manager.SettingsManager; import in.lib.utils.BitUtils; import in.lib.utils.SerialReaderUtil; import in.lib.utils.SerialWriterUtil; import in.model.base.Model; import lombok.Data; @Data public class Text extends Model { private String text; private List<MentionEntity> mentions; private List<LinkEntity> links; private List<HashEntity> hashTags; private List<? extends StyledEntity> emphasisStyles; @Override public Text createFrom(JsonElement element) { try { JsonObject textObject = element.getAsJsonObject(); if (textObject.has("description")) { textObject = textObject.get("description").getAsJsonObject(); } this.text = textObject.get("text").getAsString().trim(); if (BitUtils.contains(SettingsManager.getInstance().getEmphasisBit(), Constants.BIT_EMPHASIS_ITALIC, Constants.BIT_EMPHASIS_BOLD, Constants.BIT_EMPHASIS_UNDERLINE)) { this.emphasisStyles = new ArrayList<StyledEntity>(); if (BitUtils.contains(SettingsManager.getInstance().getEmphasisBit(), Constants.BIT_EMPHASIS_ITALIC)) { List italics = new ItalicStyledEntity().createListFrom(this.text); if (italics != null) { emphasisStyles.addAll(italics); } } if (BitUtils.contains(SettingsManager.getInstance().getEmphasisBit(), Constants.BIT_EMPHASIS_BOLD)) { List bolds = new BoldStyledEntity().createListFrom(this.text); if (bolds != null) { emphasisStyles.addAll(bolds); } } if (BitUtils.contains(SettingsManager.getInstance().getEmphasisBit(), Constants.BIT_EMPHASIS_UNDERLINE)) { List underlines = new UnderlineStyledEntity().createListFrom(this.text); if (underlines != null) { emphasisStyles.addAll(underlines); } } } JsonObject entityObject = textObject.get("entities").getAsJsonObject(); this.mentions = new MentionEntity().createListFrom(entityObject.get("mentions")); this.links = new LinkEntity().createListFrom(entityObject.get("links")); this.hashTags = new HashEntity().createListFrom(entityObject.get("hashtags")); return this; } catch (Exception e) { e.printStackTrace(); } return null; } @Override public List<? extends Model> createListFrom(JsonElement element) { return null; } @Override public String getVersion() { return "74949507-19b5-4e46-a832-50766fc63125"; } @Override public Model read(SerialReaderUtil util) { try { String version = util.readString(); if (!version.equals(getVersion())) return null; text = util.readString(); mentions = util.readModelList(MentionEntity.class); links = util.readModelList(LinkEntity.class); hashTags = util.readModelList(HashEntity.class); emphasisStyles = util.readModelList(StyledEntity.class); return this; } catch (Exception e) { e.printStackTrace(); } return null; } @Override public void write(SerialWriterUtil util) { try { util.writeString(getVersion()); util.writeString(text); util.writeModelList(mentions); util.writeModelList(links); util.writeModelList(hashTags); util.writeModelList(emphasisStyles); } catch (Exception e) { e.printStackTrace(); } } @Override public Text createFrom(Parcel parcel) { return ((Text)super.createFrom(parcel)); } public static final Parcelable.Creator<Text> CREATOR = new Creator<Text>() { @Override public Text[] newArray(int size) { return new Text[size]; } @Override public Text createFromParcel(Parcel source) { return new Text().createFrom(source); } }; }